package com.aopStudy.advice;
/*
增强类
存储增强代码

1、定义方法存储增强代码

2、使用注解配置来指定插入目标方法的位置
前置，@Before
后置，@AfterReturning
异常，@AfterThrowing
最后，@After
环绕，@Around

try {
    前置
    目标方法执行
    后置
} catch () {
    异常
} finally {
    最后
}

3、配置切点表达式[选中插入的方法即切点]
下面表达式解析:
execution(* com.aopStudy.service.impl.*.*(..))")
         /                            |  \
此*表示不考虑方法的返回值和访问修饰符   此*所有类 此*所有方法，后面紧跟这的(..)表示方法参数任意

4、补全注解
加入ioc容器，@Component
配置切面（切面=切点+增强），@Aspect

5、开启aspect的支持
配置类中加入@@EnableAspectJAutoProxy注解

 */

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Aspect
// @Order设置优先级
@Order(30)
public class LogAdvice {

    @Before("com.aopStudy.pointcut.MyPointcut.myPointCut().myPointcut()")
    public void start() {
        System.out.println("方法开始了");
    }

    @After("com.aopStudy.pointcut.MyPointcut.myPointCut().myPointcut()")
    public void after() {
        System.out.println("方法结束了");
    }

    @AfterThrowing("com.aopStudy.pointcut.MyPointcut.myPointCut().myPointcut()")
    public void error() {
        System.out.println("方法报错了");
    }


}
